#ifndef LCD_driver_H_
#define LCD_driver_H_

#define GPIO_Pin_LCD_RS		GPIO_Pin_12	//port C
#define GPIO_Pin_LCD_RW		GPIO_Pin_11	//port C
#define GPIO_Pin_LCD_E		GPIO_Pin_10	//port C
#define GPIO_Pin_LCD_DAT0	GPIO_Pin_0  //port C
#define GPIO_Pin_LCD_DAT1	GPIO_Pin_1  //port C
#define GPIO_Pin_LCD_DAT2	GPIO_Pin_2  //port C
#define GPIO_Pin_LCD_DAT3	GPIO_Pin_3  //port C
#define GPIO_LCD			GPIOC

#define Set_RS				GPIO_SetBits(GPIO_LCD, GPIO_Pin_LCD_RS)
#define Set_RW				GPIO_SetBits(GPIO_LCD, GPIO_Pin_LCD_RW)
#define Set_E				GPIO_SetBits(GPIO_LCD, GPIO_Pin_LCD_E)
#define Reset_RS			GPIO_ResetBits(GPIO_LCD, GPIO_Pin_LCD_RS)
#define Reset_RW			GPIO_ResetBits(GPIO_LCD, GPIO_Pin_LCD_RW)
#define Reset_E				GPIO_ResetBits(GPIO_LCD, GPIO_Pin_LCD_E)

#define EMode1				1//B hien thi ben phai A
#define EMode2				2//B hien thi ben trai A
#define EMode3				3//dich A ve ben trai, B hien thi ben phai A
#define EMode4				4//dich A ve ben phai, B hien thi ben trai A

#define Mode8bit 			1
#define Mode4bit			0

#define Font5x10			1
#define Font5x8				0

void LCD_Pin_Configuration(void);
void LCD_ClearDisplay(void);
void LCD_ClearLine(uint8_t Y);
void LCD_CursorHome(void);
void LCD_GotoXY(int X, int Y);
void LCD_WriteData(uint8_t Cmd);
void LCD_EntryModeSet(uint8_t EMode);
void LCD_DisplayControl(uint8_t Dc, uint8_t Cc, uint8_t Bc);
void LCD_FunctionSet(uint8_t DL, uint8_t Fontsize);
void LCD_Init(void);

#endif
